/**
 * Created by Administrator on 2015/12/22.
 * 返回到顶部功能封装
 */
define(['jquery','scroll'], function ($, scrollTo) {
    // 定义返回顶部类
    function BackTop (el,opts) {
        this.element = $(el);
        this.opts = $.extend({}, BackTop.DEFAULTS, opts);
        // 实例化滚定功能对象
        this.scroll = new scrollTo.ScrollTo({});
        // 调用自己判断位置函数，显示或隐藏
        this._checkPosition();

        // 根据传入的模式，为元素绑定函数
        if (this.opts.mode == 'move') {
            this.element.on('click', $.proxy(this._move, this));
        } else {
            this.element.on('click', $.proxy(this._goTo, this));
        }

        // 为window对象绑定滚动条监听函数
        $(window).on('scroll', $.proxy(this._checkPosition, this));
    }

    // 定义默认值
    BackTop.DEFAULTS = {
        mode : 'move', // 返回模式：move->动画，否则是直接到顶部
        pos : $(window).height(), // 默认位置是一屏的高度
        speed : 800
    };

    // 根据设定的速度移动到顶部
    BackTop.prototype._move = function () {
        this.scroll.move();
    }

    // 直接返回到顶部
    BackTop.prototype._goTo = function () {
        this.scroll.goTo();
    }

    // 检测滚动条位置，显示或隐藏返回顶部按钮
    BackTop.prototype._checkPosition = function () {
        var element = this.element;
        var pos = this.opts.pos;
        if ($(window).scrollTop() > pos) {
            element.fadeIn();
        } else {
            element.fadeOut();
        }
    }

    // 注册为jquery插件
    $.fn.extend({
        backtop : function (opts) {
            return this.each(function () {
                new BackTop(this, opts)
            });
        }
    });

    return {
        BackTop : BackTop
    };
});
